package com.ruoyi.paper.mapper;

import java.util.List;
import com.ruoyi.paper.domain.ExamPaper;
import com.ruoyi.paper.domain.ExamLib;
import com.ruoyi.paper.domain.ExamFolder;
import com.ruoyi.paper.domain.ExamPaperLib;
import com.ruoyi.paper.domain.ExamPaperOption;
import org.apache.ibatis.annotations.Param;

/**
 * 实训试卷Mapper接口
 * 
 * @author ruoyi
 * @date 2025-04-14
 */
public interface ExamPaperMapper 
{
    /**
     * 查询实训试卷
     * 
     * @param paperId 实训试卷主键
     * @return 实训试卷
     */
    public ExamPaper selectExamPaperByPaperId(String paperId);

    /**
     * 查询实训试卷列表
     * 
     * @param examPaper 实训试卷
     * @return 实训试卷集合
     */
    public List<ExamPaper> selectExamPaperList(ExamPaper examPaper);

    /**
     * 新增实训试卷
     * 
     * @param examPaper 实训试卷
     * @return 结果
     */
    public int insertExamPaper(ExamPaper examPaper);

    /**
     * 修改实训试卷
     * 
     * @param examPaper 实训试卷
     * @return 结果
     */
    public int updateExamPaper(ExamPaper examPaper);

    /**
     * 删除实训试卷
     * 
     * @param paperId 实训试卷主键
     * @return 结果
     */
    public int deleteExamPaperByPaperId(String paperId);

    /**
     * 批量删除实训试卷
     * 
     * @param paperIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteExamPaperByPaperIds(String[] paperIds);

    /**
     * 统计题库中指定题型的数量
     * 
     * @param questionType 题型
     * @return 数量
     */
    public int countExamLibByType(String questionType);


    /**
     * 更新试题被选中次数
     * 
     * @param examLibId 试题ID
     * @return 结果
     */
    public int updateExamLibNum(String examLibId);

    /**
     * 新增试卷规则
     * 
     * @param examFolder 试卷规则
     * @return 结果
     */
    public int insertExamFolder(ExamFolder examFolder);

    /**
     * 新增试卷题目
     * 
     * @param examPaperLib 试卷题目
     * @return 结果
     */
    public int insertExamPaperLib(ExamPaperLib examPaperLib);

    /**
     * 查询学生已答题的试卷列表
     * 
     * @param studentId 学生ID
     * @return 试卷列表
     */
    public List<ExamPaper> selectAnsweredPaperList(String studentId);

    /**
     * 根据试卷ID查询试卷规则
     *
     * @param paperId 试卷ID
     * @return 试卷规则
     */
    public ExamFolder selectExamFolderByPaperId(String paperId);

    /**
     * 根据试卷ID和题目类型查询题目列表
     *
     * @param paperId 试卷ID
     * @param type 题目类型
     * @return 题目列表
     */
    public List<ExamPaperLib> selectExamPaperLibByType(@Param("paperId") String paperId, @Param("type") String type);

    /**
     * 根据题目ID查询选项列表
     *
     * @param libId 题目ID
     * @return 选项列表
     */
    public List<ExamPaperOption> selectExamPaperOptionByLibId(String libId);

    /**
     * 随机抽取指定数量的题目
     *
     * @param type 题目类型
     * @param num 数量
     * @return 题目列表
     */
    public List<ExamLib> selectRandomExamLibByType(@Param("type") String type, @Param("num") int num);

}
